package org.zoomdev.zoom.aop.utils;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryCreator {

    /*
     * 根据文件路径创建所有不存在的父目录
     * @param filePath 完整的文件路径（可以是文件或目录路径）
     * @return 是否成功创建所有需要的目录（如果目录已存在也返回true）
     */
    public static boolean createDirectoriesForFile(String filePath) {
        try {
            Path path = Paths.get(filePath);

            // 如果是文件路径，取其父目录
            Path parentPath = Files.isDirectory(path) ? path : path.getParent();

            // 如果路径没有父目录（如裸文件名），直接返回true
            if (parentPath == null) {
                return true;
            }

            // 创建所有不存在的目录
            Files.createDirectories(parentPath);
            return true;
        } catch (Exception e) {
            System.err.println("创建目录失败: " + e.getMessage());
            return false;
        }
    }

    // 兼容旧版Java的File实现
    public static boolean createDirectoriesForFileLegacy(String filePath) {
        try {
            File file = new File(filePath);

            // 如果是目录，直接创建整个路径
            if (filePath.endsWith(File.separator) || !filePath.contains(".")) {
                return file.mkdirs();
            }

            // 如果是文件，创建其父目录
            File parent = file.getParentFile();
            if (parent != null) {
                return parent.mkdirs();
            }
            return true; // 没有父目录的情况
        } catch (Exception e) {
            System.err.println("创建目录失败: " + e.getMessage());
            return false;
        }
    }

    public static void main(String[] args) {
        // 测试用例
        String[] testPaths = {
                "/tmp/a/b/c/new_dir",          // 纯目录
                "/tmp/a/b/c/new_file.txt",     // 文件路径
                "relative/path/to/file.log",   // 相对路径
                "singlefile"                   // 无目录的文件名
        };

        for (String path : testPaths) {
            boolean result = createDirectoriesForFile(path);
            System.out.printf("路径: %-30s 创建结果: %b%n", path, result);
        }
    }
}
